<!--
 * @Description: 
 * @ComposerRequire: 
 * @ComposerRemove: 
 * @Author: 阿海 <764882431@qq.com>
 * @Date: 2021-06-03 09:43:20
 * @LastEditTime: 2021-07-09 18:07:32
 * @LastEditors: 阿海
-->
<script>
    
    //返回行拖拽值-处理拖拽事件: 将上一行与下一行的排序值取中间值，赋值给当前行即可
    function builderTableRowDrag(rowDrag,rowDragUrl,rowDragField,layer,myTable) {
        if (rowDrag) {
            if (rowDragUrl == '') {
                // layer.msg('未设置更新拖拽排序接口，关闭行拖拽事件', function () { });
                return false;
            }
            rowDrag = {
                trigger: 'row', //开启整行可拖拽
                done: function (obj) {
                    var index = layer.msg('正在更新排序，请稍等...', { shade: 0.1, time: 10 * 1000 });
                    // 完成时（松开时）触发
                    // 如果拖动前和拖动后无变化，则不会触发此方法
                    // console.log(obj);
                    // console.log(obj.row) // 当前行数据
                    // console.log(obj.cache) // 改动后全表数据
                    // console.log(obj.oldIndex) // 原来的数据索引
                    // console.log(obj.newIndex) // 改动后数据索引
                    // console.log("上一行：",obj.cache[obj.newIndex-1]);
                    // console.log("当前行：",obj.row);
                    // console.log("下一行：",obj.cache[obj.newIndex+1]);

                    var value = 0;
                    //拖拽至第一个
                    if (obj.cache[obj.newIndex - 1] == undefined && obj.cache[obj.newIndex + 1] != undefined) {
                        value = parseFloat(obj.cache[obj.newIndex + 1][rowDragField]) - Math.random()-0.001234; //比上一行小一点点
                    }
                    //拖拽至最后一个
                    if(obj.cache[obj.newIndex - 1] != undefined && obj.cache[obj.newIndex + 1] == undefined){
                        value = parseFloat(obj.cache[obj.newIndex - 1][rowDragField]) + Math.random()+0.001234; //比上一行大一点点
                    } 
                    //拖拽至中间
                    if (obj.cache[obj.newIndex - 1] != undefined && obj.cache[obj.newIndex + 1] != undefined) {
                       //取两者之间的整数
                        value = randomNum(parseFloat(obj.cache[obj.newIndex - 1][rowDragField]), parseFloat(obj.cache[obj.newIndex + 1][rowDragField]),'random');
                       
                        if(value == parseFloat(obj.cache[obj.newIndex - 1][rowDragField]) || value == parseFloat(obj.cache[obj.newIndex + 1][rowDragField])){
                            //取中间数
                            value = (parseFloat(obj.cache[obj.newIndex - 1][rowDragField]) + parseFloat(obj.cache[obj.newIndex + 1][rowDragField]))/2;
                            layer.msg('上下行排序值一样，请手动更新排序值.',function(){}); 
                            // return false;
                        }
                    }
                    
                    var http = new Request({ token_url: api.token_url, async: false, token_store_name: 'table_drag' })
                    var res = http.request('post', rowDragUrl, { 'field': rowDragField, 'value': value.toFixed(6), 'id': obj.row['id'] });
                    if (res.code == 0) {
                        layer.msg('排序已更新'); 
                        obj.cache[obj.newIndex][rowDragField] = value.toFixed(6);
                        obj.row[rowDragField] = value.toFixed(6);
                        //模拟点击事件-实时更新数据
                        $(myTable).next().children(".layui-table-box").children(".layui-table-main").children("table").children("tbody").children("tr").eq(obj.newIndex).children("td").each(function(){
                            if($(this).attr("lay-event") == 'row_drag'){
                                $(this).trigger("click");
                                return false;
                            }
                        });
                        setTimeout(function () {
                            layer.closeAll();
                        }, 1000);
                        return true;
                    }
                   
                    layer.msg(res.msg, function () { });
                    return false;
                    
                }
            }
        }
        return rowDrag;
    }

</script>